Rust ゼロコスト抽象化
#TODO_2
ゼロコスト抽象化(zero-cost abstraction)
下記を参照した方がよい。
ゼロコスト抽象化とは一体何なのか - Rustコトハジメ
404 Not Foundになってしまった...
要点としては、静的ディスパッチな感じで関数を生成しているのでゼロコストと言っている
静的ディスパッチ
例えば以下のようなジェネリクスの関数を作ったとする。
code:memo.rs
fn print_hash<T: Hash>(t: &T) {
println!("The hash is {}", t.hash())
}
print_hash関数で、boolやi32の引数を渡す処理を書いたとすると、下記のような関数がコンパイル時に生成される。
code:memo.rs
fn __print_hash_bool(&bool)
fn __print_hash_i32(&i32)
このようにすることを単相化というらしい。
具体的な関数が生成されるため、呼出側は生成された関数を直接呼び出すことになりオーバーヘッドがなくパフォーマンスが高い
traitを使った場合&implで静的ディスパッチになる
動的ディスパッチ
抽象化に対する追加のコスト
メモリの動的利用(動的ディスパッチ)
trait(トレイト)は、C言語では関数ポインタで実装するJavaのインターフェイス的なもの
traitで&dynをつけると動的ディスパッチ
C++で言うところのvtableを使った仮想関数あたりは同じ動的ディスパッチ
確認用
Q. ゼロコスト抽象化
Q. 静的ディスパッチ
Q. 静的ディスパッチの何がいいか
Q. 動的ディスパッチ
Q. 動的ディスパッチだと何がいいか
Q. そもそもディスパッチとは
参考
ゼロコスト抽象化 - The Embedded Rust Book
ゼロコスト抽象化とは一体何なのか - Rustコトハジメ
Abstraction without overhead: traits in Rust
ゼロコスト抽象化とは何なのか? - Qiita
Rustのゼロコスト抽象化の効果をアセンブラで確認
rust - What does 'Zero Cost Abstraction' mean? - Stack Overflow
関連
ゼロコスト抽象化
Java ジェネリクス
C++ ゼロオーバーヘッド原則
trait境界
総称型
メモ
Rust ツアー - Let's go on an adventure!
【Rust】dispatchの静と動
#Rust